package com.itheima.springboottlias.controller;


import Pojo.Emp;
import Pojo.EmpQueryParam;
import Pojo.PageResult;
import Pojo.Result;
import com.itheima.springboottlias.service.EmpService;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;


@RequestMapping("/emps")
@RestController
public class EmpController {
    private static final Logger log = LoggerFactory.getLogger(EmpController.class);
    @Autowired
    private EmpService empService;
    //分页和条件查询员工信息
    @GetMapping
    public Result page(EmpQueryParam queryParam){
        // 1.接收请求参数：kv参数
        //定义分页条件实体对象+kv格式参数
        log.info("接收到的请求参数："+queryParam);
        //2.调用业务层方法，完成查询员工列表
        PageResult pageResult = empService.page(queryParam);
        //3.封装响应结果
        return Result.success(pageResult);//code=1,msg=success,data=pageResult(页数和总记录数)
    }
    //查询所有员工信息
    @GetMapping("/list")
    public Result queryAll(){
        //调用业务层方法，查询所有员工信息
         List<Emp> list = empService.queryAllEmp();
        return Result.success(list);
    }
    //添加员工
    @PostMapping
    public Result add(@RequestBody Emp emp){
        //1.接收请求参数：json(请求体)
        // @RequestBody  定义实体对象或者使用Map对象接收请求参数
        log.info("接收到的请求参数："+emp);

        //调用业务层方法，添加员工
        empService.addEmp(emp);

        //2.如果有工作经验信息，则添加工作经验信息
        //3.调用业务层方法，完成添加
        return Result.success();
    }
    //删除员工和其对应工作经验信息
    @DeleteMapping
    public Result removeIds(@RequestParam List<Integer> ids){
        //1.接收请求参数：K+V格式参数
        //定义变量：集合+数组
        //必须加注解@RequestParam，否则无法接收
        log.info("接收到的请求参数："+ids);

        //2.调用业务层方法，完成删除
        empService.removeByIds(ids);
        log.info("删除员工和其对应工作经验信息成功");
        //3.调用业务层方法，完成删除
        return Result.success();//code=1,msg=success，data=null
    }
    //查询员工详情
    @GetMapping("/{id}")
    public Result findById(@PathVariable Integer id){
        //1.接收请求参数：路径参数
        //必须加注解@PathVariable，否则无法接收
        log.info("接收到的请求参数："+id);

        //2.调用业务层方法，完成查询
        Emp emp = empService.queryById(id);
        //3.封装响应结果
        return Result.success(emp);//code=1,msg=success,data=emp(员工详情)
    }
    //修改员工信息
    @PutMapping
    public Result update(@RequestBody Emp emp){
        //1.接收请求参数：json(请求体)
        // @RequestBody  定义实体对象或者使用Map对象接收请求参数
        log.info("接收到的请求参数："+emp);

        //2.调用业务层方法，完成修改
        empService.updateEmp(emp);

        //3.调用业务层方法，完成修改
        return Result.success();//code=1,msg=success，data=null
    }
}
